let {Maybe, Container} = require("./support");
const fp = require("loadsh/fp");
// 三、基于提供的support.js代码，完成后续的四个练习

// 练习1： 使用fp.add(x,y) 和 fp.map(f,x)创建一个能让functor里面的值增加的函数 ex1
let maybe  = Maybe.of([5,6,11])
let  ex1 = (maybe) => {
   return maybe.map(fp.map(fp.add(1)))
}
console.log("练习1：",ex1(maybe))
 
// 练习2：实现一个ex2，能够使用 fp.first获取列表的第一个元素
let xs = Container.of(["do","ray","me","fa","so","la","ti","do"])
let ex2 = (xs) => {
  return  xs.map(fp.first)
}
console.log("练习2：",ex2(xs))

// 练习3：实现一个函数ex3，使用safeProp和fp.first 找到user的名字的首字母
let safeProp = fp.curry(function(x,o){
    return Maybe.of(o[x])
})
let user = {id:2,name:'Albert'}
let ex3 = (user) => {
    // 你需要实现的函数。。。
    return safeProp("name")(user).map(fp.first) 
}
console.log("练习3：",ex3(user));

// 练习4：使用Maybe 重写 ex4，不要if语句
// let ext4 = function(n){
//     if(n){
//         return parseInt(n)
//     }
// }
 
let ext4 = function(n){
    return Maybe.of(n).map(parseInt)
}
console.log("练习4：", ext4())